<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			/*
			  函数定义方式:
			  1.function关键字
			  2.函数表达式 var fn = function
			  3.new Function
			
			  调用方式:
			  1.函数名()
			  2.new 构造函数()
			  3.对象.方法名()
			  4.事件函数
			  5.定时器函数
			  6.立即执行函数
			  
			  高阶函数:
			  就是把函数作为参数传递给函数
			  
			*/

			// (function() {
			// 	console.log("立即执行函数1");
			// })();

			// (function() {
			// 	console.log("立即执行函数2");
			// }());


			//--------高阶函数--------------------------------------------------------------------------------------------------

			/* function fn(x) {
			             x();
			}

			var test = function() {
				console.log("test")
			}

			test();

			fn(test);

			Array.forEach(function(){

			}) */


			//---闭包:一个作用域可以访问另一个作用域(函数内的局部)的变量----------------------------------------------------
			//作用:延长变量的作用范围
			/* var x = 9;

			function fn() {
				console.log(num); //undefined
				var num = 6;
				return function() {
					num++;
					console.log(num);
				}
			}

			// console.log(num);
			var rfn = fn();
			rfn();
			rfn(); */

			//-----递归------自己调自己---------------------------------------------------------------------------------------------
			function fn(num) {
				if (num > 0) {
					num--;
					console.log(num);
					fn(num);
				}
			}
			fn(6);
		</script>
	</body>
</html>
